0007. 语句和表达式
- 1. 🎯 本节内容
- 2. 🫧 评价
- 3. 📒 表达式(Expression)和语句(Statement)
- 4. 💻 demos.1 - 理解语句
- 5. 💻 demos.2 - 理解表达式
- 6. ✍️ exercises.1 - 判断是语句还是表达式
- 7. 🤔 写在前面的语句一定先于后面的语句执行吗?
- 8. 🤔 如何区分表达式和语句?
1. 🎯 本节内容
- 语句
- 表达式
2. 🫧 评价
- 这篇笔记介绍了什么是语句,什么是表达式。
- 其实语句和表达式是非常类似的,从概念上不容易区分。并且从定义来看,它们之间的关系也不是完全互斥的,而是相交的关系。也就是说有以下可能:
xxx是语句,不是表达式xxx是表达式,不是语句xxx可能同时是语句和表达式
- 很多时候我们并没有必要严格区分开我们所写某一代码片段到底是“表达式”还是“语句”,更重要的是能够理解这玩意儿能否“产生”一个值。
3. 📒 表达式(Expression)和语句(Statement)
- 表达式(Expression)和语句(Statement)是编程语言中的基本元素,它们在 JavaScript 或者其他编程语言中具有不同的作用和含义。
- 语句
- JavaScript 程序的 执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。
- 语句是 为了完成某种任务而进行的操作。
- 语句以 分号结尾(非强制)。
- 分号前面可以没有任何内容,JavaScript 引擎将其视为 空语句。
- 语句是执行某种行为的一段代码,不一定会产生值。
- 表达式
- 表达式是指 一个为了得到返回值的计算式。
- 表达式 不需要分号结尾。
- 表达式(Expression)是一段代码,它会产生一个值。
4. 💻 demos.1 - 理解语句
js
var a = 1 + 3;
// 这就是一条语句。
// 语句(statement)是为了完成某种任务而进行的操作。
// 这条语句先用 var 命令,声明了变量 a,然后将 1 + 3 的运算结果赋值给变量 a。1
2
3
4
2
3
4
js
// 【写法 1】
var a = 1 + 3; var b = 'abc';
// 语句以分号结尾(非强制),一个分号就表示一个语句结束。
// 多个语句可以写在一行内。
// 【写法 2】
var a = 1 + 3
var b = 'abc'
// 语句结尾的分号并非强制的,可以省略。
// 写法 2 和写法 1 是等效的。1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
js
;;;
// 分号前面可以没有任何内容,JavaScript 引擎将其视为空语句。
// 上面的代码就表示 3 个空语句。1
2
3
2
3
js
if (x === 10) {
console.log('x is 10')
}
// 语句(Statement)是执行某种行为的一段代码,不一定会产生值。
// 它通常会改变程序的状态(例如,循环,分支,函数调用等)。
// 上面这是一条 if 条件语句,它执行了某种操作,但并没有返回值。1
2
3
4
5
6
2
3
4
5
6
5. 💻 demos.2 - 理解表达式
js
var a = 1 + 3;
// 表达式是指一个为了得到返回值的计算式
// 以这个赋值语句 var a = 1 + 3; 为例
// 其中的 1 + 3 就叫做表达式(expression)1
2
3
4
2
3
4
js
1 + 3;
'abc';
// 表达式不需要分号结尾。
// 一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
// 上面两行语句只是单纯地产生一个值,并没有任何实际的意义。1
2
3
4
5
2
3
4
5
js
5
3 + 4
x
x = 10
// 上面这些都是表达式,它们都会产生一个值。
// 表达式(Expression)是一段代码,它会产生一个值。
// 表达式是一种求值操作,表达式本身以及它的子表达式组合在一起代表了某种值。1
2
3
4
5
6
7
2
3
4
5
6
7
6. ✍️ exercises.1 - 判断是语句还是表达式
// 以下是一些 JavaScript 的代码示例,判断它们是表达式还是语句:
// 1. var a = 5;
// 2. a + b
// 3. if (a > b) { console.log("a is greater than b"); }
// 4. return a * b;
// 5. a++
// 6. function myFunction() { return a * b; }
// 7. 3.14159
// 8. console.log("Hello, world!");
// 9. a = b = 5;
// 10. for (var i = 0; i < 5; i++) { console.log(i); }1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
参考答案
// 以下是一些 JavaScript 的代码示例,判断它们是表达式还是语句:
// 1. var a = 5;
// 2. a + b
// 3. if (a > b) { console.log("a is greater than b"); }
// 4. return a * b;
// 5. a++
// 6. function myFunction() { return a * b; }
// 7. 3.14159
// 8. console.log("Hello, world!");
// 9. a = b = 5;
// 10. for (var i = 0; i < 5; i++) { console.log(i); }
// 1. 语句(声明语句)
// 2. 表达式(算术表达式)
// 3. 语句(条件语句)
// 4. 语句(返回语句),但 a * b 是表达式
// 5. 表达式(递增表达式),也可以作为语句使用
// 6. 语句(函数声明语句),但 return a * b; 包含了返回语句和表达式
// 7. 表达式(字面量表达式)
// 8. 语句(函数调用语句),但 "Hello, world!" 是表达式
// 9. 表达式(赋值表达式),也可以作为语句使用
// 10. 语句(循环语句),但 i < 5 和 i++ 都是表达式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
7. 🤔 写在前面的语句一定先于后面的语句执行吗?
- 写在前面的语句不一定先执行。
- 在大多数情况下,我们可以认为代码是按照从上到下的顺序执行的。但是,具体哪些语句先执行,哪些语句后执行,一两句话说不清楚,这涉及到的因素有很多,比如:异步操作、事件驱动、函数调用、控制流语句…… 这些都将是我们在学习时需要重点掌握的知识点。
js
setTimeout(() => {
console.log('123')
}, 0)
console.log('456')
// 以这个简单的示例为准
// 写在前边儿的是 console.log('123')
// 卸载后边儿的是 console.log('456')
// 但是,最终会先打印 456,再打印 1231
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
8. 🤔 如何区分表达式和语句?
- 核心区别
| 特征 | 表达式 (Expression) | 语句 (Statement) |
|---|---|---|
| 本质 | 产生一个值 | 执行一个动作 |
| 结果 | 可被求值为具体值(数字、字符串等) | 通常不产生值(或产生undefined) |
| 使用位置 | 可作为其他表达式/语句的组成部分,比如 if (条件表达式) { ... } | 独立构成代码执行单元 |
- 表达式通常会产生一个值,而语句则是执行操作但不一定产生值。
- 表达式可以是语句的一部分,并且表达式总是返回一个值。
- 语句则是执行一个动作或一系列动作,不一定返回值。
- 在 JavaScript 中,许多表达式可以独立存在并作为语句,这通常称为表达式语句。
js
var a
a = 51
2
2
- 问:
a = 5这是表达式还是语句?- 答:即是表达式,又是语句。
- 它是表达式,因为它会产生一个值,结果是 5
- 它是语句,因为它执行一个动作,将 5 赋给变量 a,并返回赋值的结果 5
- 小结:
- “🤔 如何区分表达式和语句?” 这个问题其实可以不用深究,代码片段 x 可能是表达式、可能是语句、可能即是表达式又是语句,深究 x 到底是表达式还是语句并无太大意义。
- 更重要的是能够理解这玩意儿能否“产生”一个值。